﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;


namespace SoftHotel.Models
{
    public class PromocionDAO
    {

        private Conexion conexionBD = new Conexion();
        private SedeDAO sedeDao = new SedeDAO();


        public List<Promocion> ejecutar_query()
        {

            string consulta = "";
            conexionBD.AbrirConexion();
            List<Promocion> promociones = new List<Promocion>();

            consulta = "select idPromocion, idSede, tipo,fechaInicio, fechaFin, cantidadDias, estado, descuento from PROMOCION";

            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            while (dataReader != null && dataReader.Read())
            {
                Promocion promo = new Promocion();
                promo.idPromocion = dataReader.GetInt32(0);
                promo.idSede = dataReader.GetInt32(1);
                promo.tipo = dataReader.GetInt32(2);
                promo.fecha_ini = dataReader.GetDateTime(3);
                promo.fecha_fin = dataReader.GetDateTime(4);
                if (!dataReader.IsDBNull(6)) promo.cant_dias = dataReader.GetInt32(5);
                promo.estado = dataReader.GetInt32(6);
                promo.descuento = dataReader.GetDecimal(7);
                promo.porcentaje = Convert.ToInt32(promo.descuento*100);
                

                
                switch (promo.estado)
                {
                    case 0: promo.nomEstado = "Registrada"; break;
                    case 1: promo.nomEstado = "Iniciada"; break;
                    case 2: promo.nomEstado = "Finalizada"; break;
                    case 3: promo.nomEstado = "Anulada"; break;
                }

                switch (promo.tipo)
                {
                    case 0: promo.nomTipo = "Tarifa Especial Inv."; break;
                    case 1: promo.nomTipo = "Número de días"; break;
                    case 2: promo.nomTipo = "Pago Adelantado"; break;
                    
                }


                 //busq sede
                promo.nomSede = sedeDao.sedes.Where(a => a.idSede == promo.idSede).First().nombre;
               
                promociones.Add(promo);

                
            }

            conexionBD.CerrarConexion();
            return promociones;
        }


        public void add_promo(Promocion promo)
        {

            string consulta = "";
            conexionBD.AbrirConexion();

            consulta = "INSERT INTO PROMOCION (IDSEDE, TIPO,FECHAINICIO, FECHAFIN, CANTIDADDIAS, ESTADO, DESCUENTO)" +
                        "VALUES (@idsede,@tipo,@fechaini,@fechafin, @cantdias,@estado,@desc)";

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = consulta;

            command.Parameters.Add("@idsede", SqlDbType.Int).Value = promo.idSede;
            command.Parameters.Add("@tipo", SqlDbType.Int).Value = promo.tipo;
            command.Parameters.Add("@fechaini", SqlDbType.DateTime).Value = Convert.ToDateTime(promo.fecha_ini);
            command.Parameters.Add("@fechafin", SqlDbType.DateTime).Value = Convert.ToDateTime(promo.fecha_fin);
            command.Parameters.Add("@estado", SqlDbType.Int).Value = promo.estado;
            command.Parameters.Add("@cantdias", SqlDbType.Int).Value = promo.cant_dias;
            command.Parameters.Add("@desc", SqlDbType.Decimal).Value = promo.descuento;

            conexionBD.EjecutarComando2(command);

            //VEMOS QUE ID SE LE ASIGNO
            conexionBD.AbrirConexion();
            string consulta1 = "";
            consulta1 = "SELECT MAX(IDPROMOCION) AS ID FROM PROMOCION";


            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta1);
            dataReader.Read();

           promo.idPromocion = Convert.ToInt32(dataReader["ID"].ToString());
            conexionBD.CerrarConexion();

        }


        public Promocion consultar_promo(Int32 id)
        {
            String consulta = "";
            consulta = "select idpromocion, idsede, tipo,fechainicio, fechafin, cantidaddias, estado,  descuento from promocion where idpromocion = \'" + id + "\'";
            conexionBD.AbrirConexion();
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);


            dataReader.Read();
            Promocion promo = new Promocion();
            promo.idPromocion = dataReader.GetInt32(0);
            promo.idSede = dataReader.GetInt32(1);
            promo.tipo = dataReader.GetInt32(2);
            promo.fecha_ini = dataReader.GetDateTime(3);
            promo.fecha_fin = dataReader.GetDateTime(4);
            if (!dataReader.IsDBNull(6)) promo.cant_dias = dataReader.GetInt32(5);
            promo.estado = dataReader.GetInt32(6);
            promo.descuento = dataReader.GetDecimal(7);
            promo.porcentaje = Convert.ToInt32(promo.descuento * 100);


            //busq sede
            promo.nomSede = sedeDao.sedes.Where(a => a.idSede == promo.idSede).First().nombre;

            switch (promo.estado)
            {
                case 0: promo.nomEstado = "Registrada"; break;
                case 1: promo.nomEstado = "Iniciada"; break;
                case 2: promo.nomEstado = "Finalizada"; break;
                case 3: promo.nomEstado = "Anulada"; break;
            }

            switch (promo.tipo)
            {
                case 0: promo.nomTipo = "Tarifa Especial Inv."; break;
                case 1: promo.nomTipo = "Número de días"; break;
                case 2: promo.nomTipo = "Pago Adelantado"; break;

            }

            dataReader.Close();


           

            conexionBD.CerrarConexion();
            return promo;
        }

        public void editar_promo(Int32 id, Promocion promo)
        {
            string update = "";
            conexionBD.AbrirConexion();


            update = "UPDATE PROMOCION SET ESTADO = @estado, FECHAINICIO= @fechaini, FECHAFIN = @fechafin , CANTIDADDIAS = @cant, DESCUENTO=@desc" +
                        " WHERE IDPROMOCION = @id";

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = update;

            command.Parameters.Add("@fechaini", SqlDbType.DateTime).Value = Convert.ToDateTime(promo.fecha_ini);
            command.Parameters.Add("@fechafin", SqlDbType.DateTime).Value = Convert.ToDateTime(promo.fecha_fin);
            command.Parameters.Add("@estado", SqlDbType.Int).Value = promo.estado;
            command.Parameters.Add("@cant", SqlDbType.Int).Value = promo.cant_dias;
            command.Parameters.Add("@desc", SqlDbType.Decimal).Value = promo.descuento;
            command.Parameters.Add("@id", SqlDbType.Int).Value = id;
            conexionBD.EjecutarComando2(command);

        }


       

       

    }
}